package com.hfp;

import com.hfp.dao.UserDao;
import com.hfp.entity.User;
import com.hfp.service.UserService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = "com")
public class Spring01Application {
    /**
     * 主程序入口
     * 该方法演示了如何在Spring Boot应用程序中使用Spring的IoC容器来管理对象的生命周期和依赖关系
     * 通过此方法，我们可以看到如何定义和使用Bean
     *
     * @param args 命令行参数，允许从命令行向程序传递参数
     */
    public static void main(String[] args) {
        // 启动Spring Boot应用程序，并返回Spring应用上下文
        ApplicationContext ioc = SpringApplication.run(Spring01Application.class, args);

/*        // 从IoC容器中获取UserDao bean，并调用其add方法
        UserDao userDao = ioc.getBean("userDao",UserDao.class);
        userDao.add();

        // 从IoC容器中获取UserService bean，并调用其add方法
        UserService userService = ioc.getBean("userService",UserService.class);
        userService.add();
        String[] names  = ioc.getBeanDefinitionNames();
        for (String name : names){
            System.out.println(name);
        }*/
        Object name = ioc.getBean("name");
        System.out.println(name);
    }

    @Bean("name")
    public User user(){
        User user = new User();
        user.setAge(18);
        user.setName("hfp");
        user.setSex("男");
        return user;
    }

}
